home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / actlib17 / tools.h < prev    next >
C/C++ Source or Header  |  1993-10-09  |  21KB  |  796 lines

  1. /*  Copyright (C) 1993   Marc Stern  (internet: stern@mble.philips.be)  */
  2.  
  3. #ifndef __Tools_H
  4. #define __Tools_H
  5.  
  6. #include "c2cpp.h"
  7. #include <stdio.h>
  8. #include <io.h>
  9. #include <dos.h>
  10.  
  11.  
  12. /* for Microsoft (or other than Borland) */
  13.  
  14. #ifndef MK_FP
  15. #define MK_FP( seg, ofs )   (void far *)( (unsigned long)((void far *)(seg)) + (unsigned long)((void near *)(ofs)) )
  16.  
  17. struct  fcb {
  18.     char    fcb_drive;      /* 0 = default, 1 = A, 2 = B */
  19.     char    fcb_name[8];    /* File name */
  20.     char    fcb_ext[3];     /* File extension */
  21.     short   fcb_curblk;     /* Current block number */
  22.     short   fcb_recsize;    /* Logical record size in bytes */
  23.     long    fcb_filsize;    /* File size in bytes */
  24.     short   fcb_date;       /* Date file was last written */
  25.     char    fcb_resv[10];   /* Reserved for DOS */
  26.     char    fcb_currec;     /* Current record in block */
  27.     long    fcb_random;     /* Random record number */
  28. };
  29.  
  30. struct  xfcb    {
  31.     char        xfcb_flag;    /* Contains 0xff to indicate xfcb */
  32.     char        xfcb_resv[5];  /* Reserved for DOS */
  33.     char        xfcb_attr;     /* Search attribute */
  34.     struct  fcb xfcb_fcb;      /* The standard fcb */
  35. };
  36.  
  37. #endif
  38.  
  39.  
  40.             
  41. typedef unsigned char BYTE;
  42.  
  43.  
  44. /***
  45.  *  Function    :  HIBYTE/LOWBYTE
  46.  *
  47.  *  Description :  Extract high/low byte of an integer
  48.  *
  49.  *  Parameters  :  in   int x
  50.  *
  51.  *  Side-effects:  Macro, so be careful.
  52.  *
  53.  *  Return      :  none
  54.  ***/
  55.  
  56. #define HIBYTE( x )   ( (unsigned int)(x) >> 8 )
  57. #define LOWBYTE( x )  ( (unsigned char)(x) )
  58.  
  59.  
  60. /***
  61.  *  Function    :  CAST
  62.  *
  63.  *  Description :  Cast any object to any type.
  64.  *
  65.  *  Parameters  :  in     new_type      any type
  66.  *                 in     object        any variable
  67.  *
  68.  *  Side-effects:  Macro, so be careful.
  69.  *
  70.  *  Return      :  none
  71.  ***/
  72.  
  73. #define CAST( new_type, object ) ( *((new_type *)&object) )
  74.      
  75.  
  76. /***
  77.  *  Function    :  SWAP
  78.  *
  79.  *  Description :  Swap two arguments of any type.
  80.  *
  81.  *  Parameters  :  in/out   x      any type argument
  82.  *                 in/out   y      any type argument
  83.  *
  84.  *  Side-effects:  Macro, so be careful.
  85.  *
  86.  *  Return      :  none
  87.  ***/
  88.  
  89. #define SWAP( x, y )        ( (x) ^= (y) ^= (x) ^= (y) )
  90.  
  91.  
  92. /***
  93.  *  Function    :  fileexist
  94.  *
  95.  *  Description :  Test if a filename exist
  96.  *
  97.  *  Parameters  :  in   char *filename
  98.  *
  99.  *  Return      :  0 or 1
  100.  ***/
  101.  
  102. #define fileexist( filename )   ( ! access(filename, 0) )
  103.  
  104.  
  105. /***
  106.  *  Function    :  ICA_get/put
  107.  *
  108.  *  Description :  Intra-application Communications Area get/put
  109.  *                 a 16 bytes data
  110.  *
  111.  *  Parameters  :  in   void *ptr   pointer to a 16 bytes data
  112.  *
  113.  *  Return      :  none
  114.  ***/
  115.  
  116. #define ICA_get( ptr )   ( memcpy(ptr, MK_FP(0x0040, 0x00F0), 16) )
  117. #define ICA_put( ptr )   ( memcpy(MK_FP(0x0040, 0x00F0), ptr, 16) )
  118.  
  119.  
  120.  
  121. /***
  122.  *  Function    :  getkey
  123.  *
  124.  *  Description :  Return a 2-bytes key pressed.
  125.  *
  126.  *  Parameters  :  none
  127.  *
  128.  *  Decisions   :  extended characters are added to 256.
  129.  *
  130.  *  Return code :  code of key pressed.
  131.  *
  132.  *  OS/Compiler :  MS-DOS
  133.  ***/
  134.  
  135. EXTERN int getkey( void );
  136.  
  137.  
  138. /***
  139.  *  Function    :  ungetkey
  140.  *
  141.  *  Description :  Puts a 2-bytes key into the keyboard buffer
  142.  *
  143.  *  Parameters  :  in    int key           key to be buffered
  144.  *
  145.  *  Decisions   :  extended characters are added to 256.
  146.  *
  147.  *  Return code :  none
  148.  *
  149.  *  Warning     :  May not work if a keyboard buffer extender is used.
  150.  *                 Does not handle the case of buffer full.
  151.  *
  152.  *  OS/Compiler :  MS-DOS
  153.  ***/
  154.  
  155. EXTERN void ungetkey( int key );
  156.  
  157.  
  158.  
  159. /***
  160.  *  Function    :   inputkey
  161.  *
  162.  *  Description :   return a 2-bytes key pressed
  163.  *                  (extended characters are added to 256).
  164.  *
  165.  *  Parameters  :   in       int    timeout     maximum time (seconds) waiting
  166.  *                                              before a key is pressed
  167.  *
  168.  *
  169.  *  Decisions   :   If no key is hit before timeout (in seconds)
  170.  *                  the function returns 0.
  171.  *                  timeout -1 means no timeout.
  172.  *                  timeout  0 means check for type-ahead.
  173.  *
  174.  *  Return      :   -1 if time-out
  175.  *
  176.  *  OS/Compiler :   MS-DOS
  177.  ***/
  178.  
  179. EXTERN int inputkey( int timeout );
  180.  
  181.  
  182. /***
  183.  *  Function    :  fnreduce
  184.  *
  185.  *  Description :  Transforms a filename into a full reduced filename.
  186.  *
  187.  *  Parameters  :  in/out   char *filename    input/reduced filename
  188.  *
  189.  *  Decisions   :  Translate into uppercase
  190.  *                  '/' are tranlated into '\\'
  191.  *
  192.  *  Return      :  pointer to result
  193.  *
  194.  *  OS/Compiler :  MS-DOS
  195.  ***/
  196.  
  197. EXTERN char *fnreduce( char *filename );
  198.  
  199.  
  200. /***
  201.  *  Function    :  getpgmpath
  202.  *
  203.  *  Description :  Transforms a filename into a full pathname
  204.  *                 relative to program directory.
  205.  *
  206.  *  Parameters  :  in/out   char *filename    input filename
  207.  *
  208.  *  Return      :  pointer to filename    
  209.  *
  210.  *  Precond     :  Global variable extern char **_argv must be defined
  211.  *                 and assign to argv in main( int argc, char *argv[] )
  212.  *                 Built-in in Borland
  213.  *                 Built-in in Microsoft (uses _pgmptr)
  214.  *
  215.  *  OS/Compiler :  MS-DOS version >= 3.0
  216.  ***/
  217.  
  218. EXTERN char *getpgmpath( char *filename );
  219.  
  220.  
  221. /***
  222.  *  Function    :  gettmppath
  223.  *
  224.  *  Description :  Transforms a filename into a full pathname
  225.  *                 relative to temporary directory.
  226.  *
  227.  *  Decisions   :  Temporary directory is first searched
  228.  *                 into environment variable 'TEMP',
  229.  *                 after into environment variable 'TMP'.
  230.  *                 If none are defined, 'C:\' is assumed.
  231.  *
  232.  *  Parameters  :  in/out  char *filename    filename
  233.  *
  234.  *  Return      :  pointer to filename
  235.  *
  236.  *  Precond     :  Global variable extern char **_argv must be defined
  237.  *                 and assign to argv in main( int argc, char *argv[] )
  238.  *                 Built-in in Borland
  239.  *
  240.  *  OS/Compiler :  MS-DOS version >= 3.0
  241.  ***/
  242.  
  243. EXTERN char *gettmppath( char *filename );
  244.  
  245.  
  246. /***
  247.  *  Function    :  truename
  248.  *
  249.  *  Description :  Transforms a filename into a full reduced filename.
  250.  *                 Resolves all SUBST's, JOIN's, network names,...
  251.  *
  252.  *  Parameters  :  in/out   char *filename    input/reduced filename
  253.  *
  254.  *  Warning     :   - Valid only for DOS >= 2.0
  255.  *                  - Trailing '\' is not removed
  256.  *
  257.  *  Return      :  0      OK
  258.  *                 2  Invalid syntax
  259.  *                 3  Invalid drive or path
  260.  *
  261.  *  OS/Compiler :  MS-DOS version >= 2.0
  262.  ***/
  263.  
  264. EXTERN int truename( char *filename );
  265.  
  266.  
  267. /***
  268.  *  Function    :  exthandles
  269.  *
  270.  *  Description :  Allows MS-DOS program to open 255 handles
  271.  *
  272.  *  Parameters  :  none
  273.  *
  274.  *  Return      :  none
  275.  *
  276.  *  OS/Compiler :  MS-DOS version >= 3.30
  277.  ***/
  278.  
  279. EXTERN void exthandles( void );
  280.  
  281.  
  282.  
  283. /***
  284.  *  Function    :  getdensity
  285.  *
  286.  *  Description :  Return the density of a floppy drive.
  287.  *
  288.  *  Parameters  :  in    int drive         0 = A:, 1 = B:
  289.  *
  290.  *  Return      :  density in Kb (360, 720, 1200, 1440, 2880)
  291.  *                 0 if invalid drive or drive not ready
  292.  *                                        
  293.  *  Warning     :  This function does not work correctly
  294.  *                 with 8086/8088 processors
  295.  *
  296.  *  OS/Compiler :  MS-DOS
  297.  ***/
  298.  
  299. EXTERN int getdensity( int drive );
  300.  
  301.  
  302. /***
  303.  *
  304.  *  Function   :    test_drive
  305.  *
  306.  *  Topics     :    Test the availability of a drive.
  307.  *
  308.  *  Parameters :    in    int drive         0 = A:, 1 = B:, 2 = C:,...
  309.  *
  310.  *  Return code:    combination (bitwise OR) of
  311.  *                  D_READABLE
  312.  *                  D_WRITEABLE
  313.  *                  D_NOFORMAT
  314.  *                  D_INVALID
  315.  *                  D_NOTINSERTED
  316.  *                  D_REMOVABLE
  317.  *                  D_SUBST
  318.  *                  D_REMOTE
  319.  *                  D_RAM
  320.  *
  321.  *  OS/Compiler :   MS-DOS version >= 3.10
  322.  ***/
  323.  
  324. EXTERN int test_drive( int drive );
  325.  
  326. #define D_READABLE    (1<<0)
  327. #define D_WRITEABLE   (1<<1)
  328. #define D_NOFORMAT    (1<<2)
  329. #define D_INVALID     (1<<3)
  330. #define D_NOTINSERTED (1<<4)
  331. #define D_REMOVABLE   (1<<5)
  332. #define D_SUBST       (1<<6)
  333. #define D_REMOTE      (1<<7)
  334. #define D_RAM         (1<<8)
  335.  
  336.  
  337.  
  338. /***
  339.  *
  340.  *  Function    :  geterrorlevel
  341.  *
  342.  *  Description :  Return errorlevel code from previous command executed
  343.  *                 by current shell (COMMAND.COM or equivalent)
  344.  *
  345.  *  Parameters  :  none
  346.  *
  347.  *  Return      :  errorlevel
  348.  *                 -1 If MS-DOS version not supported
  349.  *
  350.  *  Warning     :  This function is only valid with shells
  351.  *                 MS-DOS COMMAND.COM 3.20, 3.21, 3.30, 4.0, 4.01, 5.0, 6.0,
  352.  *                 NDOS 6.0,
  353.  *                 4DOS 4.02
  354.  */
  355.  
  356. EXTERN int geterrorlevel( void );
  357.  
  358.  
  359.  
  360. /***
  361.  *  Function    :  getdiskfree
  362.  *
  363.  *  Description :  Return the number of bytes free of a disk.
  364.  *
  365.  *  Parameters  :  in    int disk         0 = A:, 1 = B:, ...
  366.  *
  367.  *  Return      :  number of bytes free
  368.  *                 -1 if invalid drive
  369.  *
  370.  *  OS/Compiler :  MS-DOS
  371.  ***/
  372.  
  373. EXTERN long getdiskfree( int disk );
  374.  
  375.  
  376. /***
  377.  *  Function    :  setcwd
  378.  *
  379.  *  Description :  Change to specified directory accross disks
  380.  *
  381.  *  Parameters  :  in    char *dir    input directory name
  382.  *
  383.  *  Return      :  0      OK
  384.  *                 other  Invalid syntax, drive or path
  385.  *
  386.  *  OS/Compiler :  MS-DOS
  387.  ***/
  388.  
  389. EXTERN int setcwd( const char *dir );
  390.  
  391.  
  392. /***
  393.  *
  394.  *  Function   :   getsetup
  395.  *
  396.  *  Topics     :   Read paramaters in setup file (like Windows init files).
  397.  *
  398.  *  Decisions  :   Expected file format is a list of lines of the form
  399.  *                                         
  400.  *                   [topic1] [topic2] ... [topicN]  (optional)
  401.  *                    or
  402.  *             <keyword>=<value>
  403.  *
  404.  *                 - If a [topic] is given, keyword is searched only between
  405.  *                   that [topic] line and the next one.
  406.  *
  407.  *                 - several [topic] names may be given on the same line
  408.  *                   to be aliases for the same section.
  409.  *
  410.  *                 - All letters are treated (and returned) as uppercases.
  411.  *                 - Blanks and tabs are skipped.
  412.  *
  413.  *                 - <value> can be enclosed between double quotes
  414.  *             to preserve lowercases and blanks.
  415.  *
  416.  *            - 2 consecutive double quotes allow to keep
  417.  *                   a double quote in <value>.
  418.  *
  419.  *                 - A number sign (#) in first column forces the line
  420.  *                   to be ignored.
  421.  *
  422.  *                 - The input formats in parameter 'format' are C standard
  423.  *                   ones ( %d, %s, %f,...).
  424.  *                   Values to be stored are C standard
  425.  *                   ones ( &myInt, myString, &myFloat,...).
  426.  *
  427.  *                 - Special format added: "%b" will translate
  428.  *                   True/False, Yes/No, On/Off, 1/0 into integer 1/0
  429.  *
  430.  *                 - Special format added: "%S" will result into copying
  431.  *                   all the input line (with spaces in it if any).
  432.  *                   It will not be processed by scanf-like processing.
  433.  *
  434.  *  Parameters :    in    FILE *file        input file
  435.  *                  in    char *format      "[topic1] keyword1=format keyword2=format [topic2] ..."
  436.  *                  out   pointer list      values to be stored
  437.  *
  438.  *
  439.  *  Optimization:   Keywords (or topics) are searched from the current
  440.  *                  position of the file; if not found, search is
  441.  *                  redone from the [topic] line (or the begin of
  442.  *                  the file if no [topic] asked).
  443.  *                  That means that it is very more efficient
  444.  *                  (less disk access) to sort parameters
  445.  *                  in 'format' in the same order as encountered
  446.  *                  in the file.
  447.  *
  448.  *  Return code:    number of found parameters
  449.  *                  -1     syntax error
  450.  *                  -2     file error
  451.  *                  -3     not enough memory
  452.  *
  453.  *  Precond    :   Input file must be opened with read access.
  454.  *
  455.  */
  456.  
  457. EXTERN int getsetup( FILE *file, const char *format, ... );
  458.  
  459.  
  460. /***
  461.  *  Function    :  load_options
  462.  *
  463.  *  Description :  Load options from a file.
  464.  *
  465.  *  Parameters  :  out  void * options     ptr to variable containing options
  466.  *                 in   size_t size        size of data to read
  467.  *
  468.  *  Decisions   :  The file has the same name as the program
  469.  *                 with extension .OPT and is searched in
  470.  *                 current directory, then in program directory.
  471.  *                 If option file is not found, options are not modified.
  472.  *
  473.  *  Return      :  number of bytes read
  474.  *                 -1 if file was not found
  475.  *
  476.  *  Precond     :  Global variable extern char **_argv must be defined
  477.  *                 and assign to argv in main( int argc, char *argv[] )
  478.  *                 Built-in in Borland
  479.  *
  480.  *  OS/Compiler :  MS-DOS version >= 3.0
  481.  ***/
  482.  
  483. EXTERN int load_options( void *options, size_t size );
  484.  
  485. /***   To not specify the size   ***/
  486. #define Opt_load( opt )     load_options( (opt), sizeof(*(opt)) )
  487.  
  488.  
  489.  
  490.  
  491. /***
  492.  *  Function    :  save_options
  493.  *
  494.  *  Description :  Save options in a file.
  495.  *
  496.  *  Parameters  :  in  void * options     ptr to variable containing options
  497.  *                 in  size_t size        size of data to read
  498.  *
  499.  *  Decisions   :  If options were previously loaded, this file is used.
  500.  *                 Otherwise, the file has the same name as the program
  501.  *                 with extension .OPT and is located in program directory.
  502.  *
  503.  *  Return      :  number of bytes written
  504.  *                 -1 if file not opened
  505.  *
  506.  *  Precond     :  Global variable extern char **_argv must be defined
  507.  *                 and assign to argv in main( int argc, char *argv[] )
  508.  *                 Built-in in Borland
  509.  *
  510.  *  OS/Compiler :  MS-DOS version >= 3.0
  511.  ***/
  512.  
  513. EXTERN int save_options( const void *options, size_t size );
  514.  
  515. /***   To not specify the size   ***/
  516. #define Opt_save( opt )     save_options( (opt), sizeof(*(opt)) )
  517.  
  518.  
  519. /***
  520.  *
  521.  *  Function    :  load_cfg
  522.  *
  523.  *  Description :  Load configuration from a file.
  524.  *
  525.  *  Parameters :   in   char * name        filename
  526.  *                 out  void * config      ptr to variable containing configuration
  527.  *                 in   size_t size        size of data to read
  528.  *
  529.  *  Decisions   :  The file has the same name as the parameter 'name'
  530.  *                 but with extension .CFG
  531.  *                 If configuration file is not found, config is unchanged.
  532.  *
  533.  *  Return     :   number of bytes read
  534.  *                 -1 if file was not found
  535.  *
  536.  *  OS/Compiler :  MS-DOS
  537.  ***/
  538.  
  539. EXTERN int load_cfg( const char *name, void *config, size_t bsize );
  540.  
  541. /***   To not specify the size   ***/
  542. #define Cfg_load( name, cfg )   load_cfg( (name), (cfg), sizeof(*(cfg)) )
  543.  
  544.  
  545.  
  546. /***
  547.  *
  548.  *  Function    :  save_cfg
  549.  *
  550.  *  Description :  Save a configuration into a file.
  551.  *
  552.  *  Parameters  :  in   char * name        filename
  553.  *                 in   void * config      ptr to variable containing configuration
  554.  *                 in   size_t size        size of data to write
  555.  *
  556.  *  Decisions   :  The file has the same name as the parameter 'name'
  557.  *                 but with extension .CFG
  558.  *
  559.  *  Return      :  number of bytes written
  560.  *                 -1 if file was not found
  561.  *
  562.  *  OS/Compiler :  MS-DOS
  563.  ***/
  564.  
  565. EXTERN int save_cfg( const char *name, const void *config, size_t bsize );
  566.  
  567. /***   To not specify the size   ***/
  568. #define Cfg_save( name, cfg )   save_cfg( (name), (cfg), sizeof(*(cfg)) )
  569.  
  570.  
  571.  
  572. /***
  573.  *  Function    :  filencopy
  574.  *
  575.  *  Description :  Copy n characters from a file on another.
  576.  *
  577.  *  Parameters  :  in   int            target    target file descriptor
  578.  *                 in   int            source    source file descriptor
  579.  *                 in   unsigned long  length    number of bytes to copy
  580.  *
  581.  *  Precond     :  The two files must be opened.
  582.  *
  583.  *  Decisions   :  The copy can stop when eof is reached.
  584.  *
  585.  *  Warning     :  no rewind is performed on either file!!!
  586.  *
  587.  *  Return      :  0 if OK
  588.  *                 errno if set
  589.  *                 -1 otherwise
  590.  *
  591.  *  OS/Compiler :  All
  592.  ***/
  593.  
  594. EXTERN int filencopy( int source, int target, unsigned long length );
  595.  
  596. /* maximum size */
  597. #define filecopy( source, target )    filencopy( source, target, 0xFFFFFFFF )
  598.  
  599.  
  600. /***
  601.  *  Function    :  Filencopy
  602.  *
  603.  *  Description :  Copy n characters from a file on another.
  604.  *
  605.  *  Parameters  :  in   char *         source    source filename
  606.  *                 in   char *         target    target filename
  607.  *                 in   unsigned long  length    number of bytes to copy
  608.  *
  609.  *  Decisions   :  The copy can stop when eof is reached.
  610.  *
  611.  *  Return      :  0 if OK
  612.  *                 errno if set
  613.  *                 -1 otherwise
  614.  *
  615.  *  OS/Compiler :  All
  616.  ***/
  617.  
  618. EXTERN int Filencopy( const char *source, const char *target, unsigned long length );
  619.  
  620. /* maximum size */
  621. #define Filecopy( source, target )    Filencopy( source, target, 0xFFFFFFFF )
  622.  
  623.  
  624.  
  625.  
  626. /***
  627.  *  Function    :  Filecat
  628.  *
  629.  *  Description :  Concatenate two files on another.
  630.  *
  631.  *  Parameters  :  in   char *     newpath     result filename
  632.  *                 in   char *     path1       target filename
  633.  *                 in   char *     path2       source filename
  634.  *
  635.  *  Return      :  0 if OK
  636.  *                 errno if set
  637.  *                 -1 otherwise
  638.  *
  639.  *  OS/Compiler :  All
  640.  ***/
  641.  
  642. EXTERN int Filecat( const char *newpath, const char *path1, const char *path2 );
  643.  
  644.  
  645. /***
  646.  *  Function    :  filetrunc
  647.  *
  648.  *  Description :  Truncate a file to a specified length.
  649.  *
  650.  *  Parameters  :  in   int            fd        file descriptor
  651.  *                 in   unsigned long  length    number of bytes to copy
  652.  *
  653.  *  Precond     :  The file must be opened with writing permission
  654.  *
  655.  *  Warning     :  no rewind is performed on the file!!!
  656.  *
  657.  *  Return      :  0 if OK
  658.  *                 errno if error
  659.  *
  660.  *  OS/Compiler :  All
  661.  ***/
  662.  
  663. EXTERN int filetrunc( int fd, unsigned long length );
  664.  
  665.  
  666.  
  667.  
  668. /***
  669.  *  Function    :  Filetrunc
  670.  *
  671.  *  Description :  Truncate a file to a specified length.
  672.  *
  673.  *  Parameters  :  in   char *         path      file descriptor
  674.  *                 in   unsigned long  length    number of bytes to copy
  675.  *
  676.  *  Return      :  0 if OK
  677.  *                 errno if error
  678.  *
  679.  *  OS/Compiler :  All
  680.  ***/
  681.  
  682. EXTERN int Filetrunc( const char *path, unsigned long length );
  683.  
  684.  
  685.  
  686.  
  687. /***
  688.  *  Functions   :  filedel
  689.  *
  690.  *  Description :  Like 'unlink' but allows wildcards
  691.  *
  692.  *  Parameters  :  in   char *  filename   pathname with/without wildcards
  693.  *
  694.  *  Return      :  none
  695.  *
  696.  *  OS/Compiler :  MS-DOS
  697.  ***/
  698.  
  699. EXTERN void filedel( const char *filename );
  700.  
  701.  
  702.  
  703. /***
  704.  *  Function    :  getPasswd
  705.  *
  706.  *  Description :  Input a password (echoes '*')
  707.  *
  708.  *  Parameters  :  in  char *passwd    string to store password
  709.  *
  710.  *  Decisions   :  Echoes '*' in place of characters.
  711.  *                  Backspace and left arrow can be used to erase characters
  712.  *                  Characters must be in the range 32 - 254
  713.  *
  714.  *  Return      :  pointer to password
  715.  *
  716.  *  OS/Compiler :  MS-DOS & Turbo-C
  717.  ***/
  718.  
  719. EXTERN char *getPasswd( char *passwd );
  720.  
  721.  
  722.  
  723. /***
  724.  *  Function    :  vollabel
  725.  *
  726.  *  Description :  Get/Set disk volume label
  727.  *
  728.  *  Parameters  :  in       int drive         0 = A:, 1 = B:, ...
  729.  *                 in/out   char *vol         volume label
  730.  *
  731.  *  Decisions   :  - If *vol = '\0', it is filled with disk volume label.
  732.  *                 - Otherwise, vol is copied onto disk volume label.
  733.  *
  734.  *  Return      :   0 if OK
  735.  *                 -1 if error
  736.  ***/
  737.  
  738. EXTERN int vollabel( int drive, char *vol );
  739.  
  740.  
  741. #if ! defined(__TURBOC__)
  742. /*  void sound ( short frequency, long duration )
  743.  *
  744.  *  Makes the PC speaker emit a sound at `frequency' Herz for approximately
  745.  *  `duration' milliseconds.
  746.  */
  747. EXTERN void sound ( short frequency, long duration );
  748. #endif
  749.  
  750. /***
  751.  *
  752.  *  Function beep :   Emit a beep.
  753.  *
  754.  ***/
  755. EXTERN void beep( void );
  756.  
  757. /***
  758.  *
  759.  *  Function buzzer:   Emit a buzzer sound.
  760.  *
  761.  ***/
  762. EXTERN void buzzer( void );
  763.  
  764.  
  765. /***
  766.  *  Function    :  cpu_type
  767.  *
  768.  *  Description :  returns cpu type (86, 186, 286, 386, 486)
  769.  *
  770.  *  Parameters  :  none
  771.  *
  772.  *  Return      :  86, 186, 286, 386, 486
  773.  ***/
  774.  
  775. EXTERN int far cpu_type( void );
  776.  
  777.  
  778. /***
  779.  *
  780.  *  Function   :    isredirected
  781.  *
  782.  *  Topics     :    Test if stdin/stdout is redirected
  783.  *
  784.  *  Parameters :    in  int streamNb
  785.  *
  786.  *  Values     :    1: stdin
  787.  *                  2: stdout
  788.  *
  789.  *  Return     :    1 if redirected, 0 otherwise
  790.  *
  791.  ***/
  792.  
  793. EXTERN int isredirected( int streamNb );
  794.  
  795. #endif
  796.